package com.winner;

/**
 * 多线程可见性测试
 *
 * @author peter_wang
 * @create-time 2015-1-12 下午3:56:29
 */
//每个线程有自己的工作内存，修改进程主内存的值，都需要拷贝到工作内存修改后，再回写，其他线程可能出现，读取到未回写的脏数据这种情况。
public class ThreadVisableDemo {
    private static int a = 0;

    static class GetNumThread extends Thread {
        @Override
        public void run() {
            System.out.println(a);//B1
        }
    }

    static class ChangeNumThread extends Thread {
        @Override
        public void run() {
            a = 1;//A1,A2
        }
    }

    /**
     *
     *
     * @param args
     */
    public static void main(String[] args) {
        GetNumThread getNumThread = new GetNumThread();
        ChangeNumThread changeNumThread = new ChangeNumThread();
        changeNumThread.start();//C1 A1读取完数据进行操作，写入到线程A工作内存写缓存中，不一定实时刷新主内存中a的值，B1可能读取到旧数据
        getNumThread.start();//C2
    }

}